package cl.solidit.geomanagement.persistance.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "persona")
public class Persona {
	@Id
	@GeneratedValue(strategy = GenerationType.TABLE)
	private Long id;
	@Column(nullable=false)
	private String nombre;
	@Column(nullable=true)
	private String rut;
	@Column(nullable=false)
	private String direccion;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "comuna",nullable=false)
	private Comuna comuna;
	private String contacto;
	@Column(name = "fono_casa")
	private String fonoCasa;
	@Column(name = "fono_oficina")
	private String fonoOficina;
	@Column(name = "fono_movil")
	private String fonoMovil;
	private String ciudad;
	private String correo;
	@Column(name = "fecha_ingreso")
	private Date fechaIngreso;
	private String observaciones;
	@OneToMany(mappedBy = "propietario", fetch = FetchType.LAZY)
	private List<Propiedad> propiedades = new ArrayList<Propiedad>(0);
	@OneToOne(fetch = FetchType.LAZY, mappedBy = "persona", optional = true,cascade=CascadeType.ALL)
	private Usuario usuario;

	public Persona() {

	}

	public Persona(String nombre, String rut, String direccion, Comuna comuna,
			String contacto, String fonoCasa, String fonoOficina,
			String fonoMovil, String ciudad, String correo, Date fechaIngreso,
			String observaciones) {
		super();
		this.nombre = nombre;
		this.setRut(rut);
		this.direccion = direccion;
		this.comuna = comuna;
		this.contacto = contacto;
		this.fonoCasa = fonoCasa;
		this.fonoOficina = fonoOficina;
		this.fonoMovil = fonoMovil;
		this.ciudad = ciudad;
		this.correo = correo;
		this.fechaIngreso = fechaIngreso;
		this.observaciones = observaciones;
	}

	public List<Propiedad> getPropiedades() {
		return propiedades;
	}

	public void setPropiedades(List<Propiedad> propiedades) {
		this.propiedades = propiedades;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public Comuna getComuna() {
		return comuna;
	}

	public void setComuna(Comuna comuna) {
		this.comuna = comuna;
	}

	public String getContacto() {
		return contacto;
	}

	public void setContacto(String contacto) {
		this.contacto = contacto;
	}

	public String getFonoCasa() {
		return fonoCasa;
	}

	public void setFonoCasa(String fonoCasa) {
		this.fonoCasa = fonoCasa;
	}

	public String getFonoOficina() {
		return fonoOficina;
	}

	public void setFonoOficina(String fonoOficina) {
		this.fonoOficina = fonoOficina;
	}

	public String getFonoMovil() {
		return fonoMovil;
	}

	public void setFonoMovil(String fonoMovil) {
		this.fonoMovil = fonoMovil;
	}

	public String getCiudad() {
		return ciudad;
	}

	public void setCiudad(String ciudad) {
		this.ciudad = ciudad;
	}

	public String getCorreo() {
		return correo;
	}

	public void setCorreo(String correo) {
		this.correo = correo;
	}

	public Date getFechaIngreso() {
		return fechaIngreso;
	}

	public void setFechaIngreso(Date fechaIngreso) {
		this.fechaIngreso = fechaIngreso;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getRut() {
		return rut;
	}

	public void setRut(String rut) {
		this.rut = rut;
	}
	

}
